import { ServiceInfo } from '../type/ServiceInfo'

/**
 * @ClassName LayerModelSimple
 * @Description 单一的图层加载模型，只管理一个地图
 * @Author xuyizhuo
 * @Date 2023/11/16 22:13
 */
export default abstract class LayerModelSimple<T> {
    protected realMap: T // 地图实例，比如创建出来的地图对象，Cesium的Viewer
    protected serviceInfo: ServiceInfo // 服务信息
    protected isLoading: boolean // 图层是否已经加载
    protected isVisible: boolean // 图层是否显示

    /**
     *
     * @param {T} realMap 地图实例，比如创建出来的地图对象，二维地图的Map，Cesium的Viewer
     * @param {ServiceInfo} serviceInfo 服务信息
     */
    constructor(realMap: T, serviceInfo: ServiceInfo) {
        if (!realMap) {
            throw new Error('开发错误，未获取到地图实例，无法加载地图。对象实例：' + this.constructor.name)
        }
        if (!serviceInfo) {
            throw new Error('开发错误，服务信息不能为空。对象实例：' + this.constructor.name)
        }
        this.realMap = realMap
        this.serviceInfo = serviceInfo
        this.isLoading = false
        this.isVisible = false
    }

    /**
     * 加载图层
     * @returns {LayerModel}
     */
    abstract add(): LayerModelSimple<T>

    /**
     * 删除图层
     * @returns {LayerModel}
     */
    abstract remove(): LayerModelSimple<T>

    /**
     * 设置图层的可见性
     * @param {boolean} visible
     * @returns {LayerModel}
     */
    abstract setVisible(visible: boolean): LayerModelSimple<T>

    /**
     * 飞行定位到图层
     * @returns {LayerModel}
     */
    abstract flyTo(): LayerModelSimple<T>
}
